package models.common.entity;


import java.util.Date;
import java.util.Random;

import javax.persistence.Entity;
import javax.persistence.Transient;

import play.db.jpa.Model;

import common.constants.ConfConst;
import common.constants.Constants;
import common.utils.Security;
import common.utils.number.Arith;

/**
 * 数字商票表
 *@author xiaojun
 *@version 2017-4-14 下午3:18:38
 */
@Entity
public class t_digital_commercial_paper extends Model{
	/**
	 * 构造器
	 */
	public t_digital_commercial_paper(){};
	
	@Transient
	public String signId;
	public String getSignId () {
		
		return Security.addSign(this.id, Constants.BID_ID_SIGN, ConfConst.ENCRYPTION_KEY_DES);
	}
	/**开票人授信申请id */
    public long credit_limit_id;
    /**开票人授信id*/
    public long company_credit_id;
    /**收票人授信id*/
    public long receive_credit_id;
    /**开票人id */
    public long company_id;
    /**开票人 */
    public String drawer;
    /**账款序号 */
    public String contract_name_code;

    /**上一级的商票id  */
    public long original_id;
    
    /**现在的商票id（关联到商票表）  */
    public long commer_paper_id;
    
	@Transient
	public String signPaperId;
	public String getSignPaperId () {
		
		return Security.addSign(this.commer_paper_id, Constants.BID_ID_SIGN, ConfConst.ENCRYPTION_KEY_DES);
	}
    /**数字商票金额'*/
    public double digital_com_paper_money;
    
    /**融通比例'*/
    public double finacing_ratio;
    
    /**融通最高金额'*/
    @Transient
    public double finacing_limit;
    public double getFinacing_limit(){
    	double amount = Arith.div(Arith.mul(digital_com_paper_money, finacing_ratio),100,2);
    	return amount > finacing_residue_limit ? finacing_residue_limit : amount; 
    }
    /**收票人id */
    public long receive_id;
    /**收票人*/
    public String receive_person;

    /**凭证时间 */
    public Date billing_time;

    /**付款时间*/
    public Date payment_time;

    /**数字商票（正面） */
    public String digital_com_pic_on;

    /**数字商票（反面） */
    public String digital_com_pic_under;

    /**状态状态0 待确认 1 已确认 2 已拒收 3 已到期 4 已逾期 5 已失效 6 已撤销 7 质押中 8 已背书 9 已还款*/
    public int digital_com_status;
    /**还款状态  0 未还款  1 已还款*/
    public int repayment_status;
    /**商票类型（收到的或者是开出的）\r\n0 收到的\r\n1 开出的 */
    public int type;

    /**授信号码*/
    public String pledge_code;

    /**授信起始日期*/
    public Date pledge_drawer_time;

    /**授信到期日期*/
    public Date pledge_expire_time;
    
    /**当前票的开票日期 */
    public Date pledge_current_time;

    /**是否可以背书申请 \r\n0 可以\r\n1 不可以 */
    public int is_allow_endorse;
   
    
    /**债权表id */
    public long debt_creditor_id;
    
    /**账款id*/
    @Transient
	public String creditorSign;
	public String getCreditorSign () {
		
		return Security.addSign(this.debt_creditor_id, Constants.BID_ID_SIGN, ConfConst.ENCRYPTION_KEY_DES);
	}
    
    /**凭证号码 */
    public String certificate_code;
    /**托收状态 默认为 0 未托收  1 已托收 */
    public Integer collection_status;
    
    public Integer getCollection_status(){
    	if(collection_status==null){
    		collection_status=0;
        }
    	return collection_status;
    }
    
    /**操作类型0 未操作 1 背书 2 质押*/
    public int is_endorse;
    /**冻结金额*/
    public double account_frozen;
    /**转让标识 0 可转让 1 不可转让*/
    public int is_allow_turn;
    /**收票时间*/
    public Date invoice_time;
    /**放款人id*/
    public long lender_id;
    /**放款人名称*/
    public String lender_name;
    /**可用额度*/
    public double  finacing_residue_limit;
    
    /**获取状态*/
    public DigitalStatus getStatus() {
    	DigitalStatus status = DigitalStatus.getEnum(this.digital_com_status);
		
		return status;
	}
	
    /**
   	 * 数字商票表的状态
   	 *
   	 * @description 
   	 *
   	 * @author xiaojun
   	 * @createDate 2017年4月15日
   	 */
   	public enum DigitalStatus {
   		//0 待签收 1 已签收 2 已拒收 3 已到期 4 已逾期 5 已失效 6 已撤销 7 质押中 8 已背书 9 已划款 10已融通
   		/** 待签收 */
   		TBC(0, "待签收"),
   		
   		/** 已签收*/
   		CONFIRM(1, "已签收"), 
   		
   		/** 已拒收*/
   		REJECTION(2, "已拒收"), 
   		
   		/** 已到期 */
  		 EXPIRE(3, "已到期"),
  		
  		/** 已逾期 */
  		 OVERDUE(4,"已逾期"),
   		/** 已失效*/
   		 LOSE_EFFICACY(5, "已失效"),
   		 /**已撤票*/
   		REVOCATION(6, "已撤票"),
   		/** 质押中*/
   		PLEDGE(7,"质押中"),
   		/** 已背书*/
   		ENDORSE(8,"已背书"),
   		/**已划款*/
   		REPAYMENT(9,"已划款"),
   		/**已融通*/
   		FINANCING(10,"已融通")
   		;
   		
   		/** 状态 */
   		public int code;
   		
   		/** 描述 */
   		public String value;
   		
   		   		
   		
   		
   		private DigitalStatus(int code, String value){
   			this.code = code;
   			this.value = value;
   		}
   		
   		public static DigitalStatus getEnum(int code){
   			DigitalStatus[] bidstatus = DigitalStatus.values();
   			for(DigitalStatus income:bidstatus){
   				if(income.code == code){
   					
   					return income;
   				}
   			}
   			
   			return null;
   		}
   	}
   	
}